package lib

func init() {
	Probs = append(Probs, Problem{
		Num:         357,
		Discription: "所有位的数字都不相同的数字个数",
		Level:       2,
		Labels: map[string]int{
			"动态规划": 1,
			"数学":   1,
		},
	})
}

func CountNumbersWithUniqueDigits(n int) int {
	if n == 0 {
		return 1
	}

	if n == 1 {
		return 10
	}

	//所有位都不为0的不重复数：9*9*8*7...
	fullCount := 9
	//最高位为0的不重复数（前一位的总数）
	totalCount := 10
	//剩余可选的数字
	leftNum := 9
	for i := 1; i < n; i++ {
		fullCount *= leftNum
		totalCount += fullCount
		leftNum--
	}

	return totalCount
}
